package cn.blnp.net.flowable.identity.relation;

import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.IdentityService;
import org.flowable.idm.api.Group;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;
import java.util.Optional;

/**
 * <h3>用户与用户组关系管理</h3>
 *
 * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
 * @version 1.0
 * @since 2025/4/30 14:21
 */
@Slf4j
@SpringBootTest
public class FlowUserGroupTest {

    @Resource
    private IdentityService identityService;

    /**
     * 将用户加入用户组
     * @param userId 用户编号
     * @param groupId 用户组编号
     */
    public void addUserToGroup(String userId, String groupId) {
        identityService.createMembership(userId, groupId);
    }

    /**
     * <p><b>用途:用户与用户组关联测试<b></p>
     * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
     * @since 14:42 2025/4/30
     * @params [] 
     * @param  
     * @return void
    **/
    @Test
    public void test() {
        Optional<Group> first = identityService.createGroupQuery()
                .list()
                .stream()
                .findFirst();
        if (first.isPresent()) {
            Group group = first.get();
            log.warn("用户组ID：{}，用户组名称：{}",group.getId(),group.getName());
            //随机获取一个用户
            identityService.createUserQuery()
                    .list()
                    .stream()
                    .findFirst()
                    .ifPresent(user -> {
                        log.warn("用户ID：{}，用户名称：{}",user.getId(),user.getFirstName());
                        //将用户加入用户组
                        addUserToGroup(user.getId(), group.getId());
                        log.warn("用户 {} 加入用户组 {} 成功", user.getId(), group.getId());
                    });
        }

        /**
         *  演示结果：
         *  2025-04-30 14:42:56.341  WARN 46464 --- [           main] c.b.n.f.i.relation.FlowUserGroupTest     : 用户组ID：process_platform_department，用户组名称：流程平台部
         * 2025-04-30 14:42:56.353  WARN 46464 --- [           main] c.b.n.f.i.relation.FlowUserGroupTest     : 用户ID：hebo，用户名称：三
         * 2025-04-30 14:42:56.391  WARN 46464 --- [           main] c.b.n.f.i.relation.FlowUserGroupTest     : 用户 hebo 加入用户组 process_platform_department 成功
         **/
    }

    /**
     * <p><b>用途:用户附加信息测试<b></p>
     * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
     * @since 14:52 2025/4/30
     * @params []
     * @param
     * @return void
    **/
    @Test
    public void test1() {
        identityService.setUserInfo("hebo", "mobile", "13999999999");
        identityService.setUserInfo("hebo", "sex","男");

        //查询指定用户的所有附加信息
        List<String> userInfoKeys = identityService.getUserInfoKeys("hebo");
        for (String userInfoKey : userInfoKeys) {
            String value = identityService.getUserInfo("hebo", userInfoKey);
            log.info("userInfoKey：{}，value：{}", userInfoKey, value);
        }

        /**
         *  2025-04-30 14:52:24.364  INFO 28556 --- [           main] c.b.n.f.i.relation.FlowUserGroupTest     : userInfoKey：mobile，value：13999999999
         * 2025-04-30 14:52:24.365  INFO 28556 --- [           main] c.b.n.f.i.relation.FlowUserGroupTest     : userInfoKey：sex，value：男
         **/
    }
}
